package br.com.qualityempresa.seguranca

import org.springframework.web.context.request.RequestContextHolder

/**
 * Classe resposável em conter informação do usuário autenticado na aplicação.
 * @author Manu
 * @version 1.0
 */
class AutenticacaoUtils {

	/**
	 * Verifica se existe um usuário autenticado na sessão
	 * @return	<b>TRUE</b> caso possuir um usuário na sessão<br/>
	 * 			<b>FALSE</b> caso não possuir um usuário na sessão
	 */
	public Boolean isUsuarioAutenticado() {
		if (getUsuarioAutenticado()) {
			return true
		}
		return false
	}
	
	/**
	 * Verifica se o usuário na sessão é igual ao usuário passado pelo parâmetro.
	 * @return	<b>TRUE</b> caso o usuário em teste for igual ao usuário da sessão<br/>
	 * 			<b>FALSE</b> caso o usuário em teste for diferente ao usuário da sessão
	 */
	public Boolean isUsuarioAutenticado(Usuario usuario) {
		if (getUsuarioAutenticado()) {
			return getUsuarioAutenticado().id == usuario.id
		}
		return false
	}

		/**
	 * @return uma instância de Usuario autenticado na sessão
	 */
	public Usuario getUsuarioAutenticado() {
		return RequestContextHolder.currentRequestAttributes().getSession().usuarioAutenticado
	}

	/**
	 * @param usuario atribui uma instância na sessão
	 */
	public void setUsuarioAutenticado(Usuario usuario) {
		RequestContextHolder.currentRequestAttributes().getSession().usuarioAutenticado = usuario
	}
	
	/**
	 * @return Uma instância de Perfil do usuário autenticado na sessão. <br/>
	 * 		Caso não possuir um usuário autenticado é retornado o perfil de Anonimo. 
	 */
	public Perfil getPerfilUsuarioSistema() {
		def Perfil perfil
		if (isUsuarioAutenticado()) {
			def usuario = Usuario.get(getUsuarioAutenticado().id)
			perfil = Perfil.get(usuario?.perfil?.id)
		} else {
			perfil = Perfil.get(Perfil.PERFIL_ANONIMO_ID)
		}
		return perfil		
	}
}
